package com.situ.skymallproductapi.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.situ.model.Product;
import com.situ.model.ProductCategory;
import com.situ.model.search.ProductSearchBean;
import com.situ.service.ProductService;
import com.situ.skymallproductapi.mapper.ProductMapper;
import com.situ.skymallproductapi.service.CategoryFeignService;
import com.situ.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品服务接口实现
 */

@Service
public class ProductServiceImpl implements ProductService {
    private ProductMapper productMapper;
    private CategoryFeignService categoryFeignService;

    @Autowired
    public ProductServiceImpl(ProductMapper productMapper) {
        this.productMapper = productMapper;
    }

    @Autowired
    public void setCategoryFeignService(CategoryFeignService categoryFeignService) {
        this.categoryFeignService = categoryFeignService;
    }

    /*
      查询所有商品 条件查询
      @param page 分页参数
      @param search 查询条件
      @return 商品分页列表
     */
    @Override
    public Page<Product> getList(Page<Product> page, ProductSearchBean searchBean) {
        Page<Product> list = productMapper.getList(page, searchBean);
        //给每个商品加入分类信息
        list.getRecords().forEach(product -> {
            ResponseEntity<JsonResult<ProductCategory>> resp = categoryFeignService.getById(product.getCategoryId());
            if (resp.getBody() != null) {
                product.setProductCategory(resp.getBody().getData());
            }
        });
        return list;
    }

    /*
      根据id查询商品
      @param id 商品id
      @return 商品
     */
    @Override
    public Product getById(Integer id) {
        return productMapper.selectById(id);
    }

    /*
      保存商品
      @param product 商品
      @return 是否保存成功
     */
    @Override
    public boolean save(Product product) {
        return productMapper.insert(product) == 1;
    }

    /*
      更新商品
      @param product 商品
      @return 是否更新成功
     */
    @Override
    public boolean updateById(Product product) {
        return productMapper.updateById(product) == 1;
    }

    /*
      删除商品
      @param id 商品id
      @return 是否删除成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return productMapper.deleteById(id) == 1;
    }

    /*
      根据商品分类id查询商品
      @param categoryId 商品分类id
      @return 商品列表
     */
    @Override
    public List<Product> getByCategoryId(Integer categoryId) {
        return productMapper.getByCategoryId(categoryId);
    }

    /**
     * 切换商品秒杀状态
     * @param id 商品id
     * @return 是否切换成功
     */
    @Override
    public boolean toggleSeckill(Integer id) {
        //查询当前状态
        Product product = getById(id);
        int isSeckill = product.getIsSeckill();
        if (isSeckill == 0) {
            return productMapper.updateSeckill(id, 1) == 1;
        } else {
            return productMapper.updateSeckill(id, 0) == 1;
        }
    }

    /**
     * 切换商品上架状态
     * @param id 商品id
     * @return 是否切换成功
     */
    @Override
    public boolean toggleOnSale(Integer id) {
        //查询当前状态
        Product product = getById(id);
        int isOnSale = product.getIsOnSale();
        if (isOnSale == 0) {
            return productMapper.updateOnSale(id, 1) == 1;
        } else {
            return productMapper.updateOnSale(id, 0) == 1;
        }
    }

    /**
     * 设置秒杀商品库存
     * @param productId 商品id
     * @param delta 增加的库存数量
     */
    @Override
    public boolean updateForIncrementQty(Integer productId, int delta) {
        return this.productMapper.updateForIncrementQty(productId, delta) == 1;
    }

    /**
     * 扣减库存
     * @param productId 商品id
     * @param delta 扣减的库存数量
     */
    @Override
    public boolean decrementStock(Integer productId, int delta) {
        return this.productMapper.decrementStock(productId, delta) == 1;
    }
}
